/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.clyme.expediente.controlador;

import com.clyme.expediente.entidad.Usuario;
import com.clyme.expediente.servicios.LoginServicio;
import com.clyme.expediente.utilitarios.Utilitario;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author SAM
 */
@ManagedBean(name = "loginControlador")
@RequestScoped
public class LoginControlador implements Serializable{
    
    private LoginServicio loginServicio;
    private SesionControlador sesion;
    private Usuario user;
   
    public LoginControlador()
    {
       user = new Usuario();
    }
   
    public String login() {
        loginServicio = new LoginServicio();
        if (!esVistaValida()) {
            return "";
        }
        if (!loginServicio.esValido(user)) {
            return "";
        }
        user = loginServicio.crearUsuarioSesion(user);
        sesion = new SesionControlador();
        sesion.setUsuario(user);
        sesion.ensamblarMenu();
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("sesionControlador", sesion);
        return "views/home?faces-redirect=true";
    }

    public String logout() {
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear();
        if (session != null) {
            session.invalidate();
        }
        return "salir";
    }

    /**
     * Validaciones de la Vista *
     */
    private boolean esVistaValida() {
        if (!esNickValido()) {
            return false;
        }
        if (!esClaveValida()) {
            return false;
        }
        return true;
    }

    private boolean esNickValido() {
        if (Utilitario.esNulo(getUser().getNick())) {
            Utilitario.enviarMensajeGlobalError("Debe ingresar el usuario");
            return false;
        } else if (!Utilitario.esRangoValido(getUser().getNick(), 20)) {
            Utilitario.enviarMensajeGlobalError("El máximo de caracteres del Usuario es 20");
            return false;
        }
        return true;
    }

    private boolean esClaveValida() {
        if (Utilitario.esNulo(getUser().getClave())) {
            Utilitario.enviarMensajeGlobalError("Debe ingresar la clave");
            return false;
        } else if (!Utilitario.esRangoValido(getUser().getClave(), 20)) {
            Utilitario.enviarMensajeGlobalError("El máximo de caracteres de la Clave es 20");
            return false;
        }
        return true;
    }
   
    /** GETTERS AND SETTERS **/
    
    public Usuario getUser() {
        return user;
    }

    public void setUser(Usuario user) {
        this.user = user;
    }

    public void setSesion(SesionControlador sesion) {
        this.sesion = sesion;
    }
   
}
